<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Report extends MY_Controller {
    
    public function __construct()
    {
        parent::__construct();
        $this->checkLogin();
        $this->data['controller'] = 'report';
        $this->load->model('Mreport');
        $this->load->model('Mdevice');
    }
    
    /**
     * Báo cáo hệ thống(group)
     */
    public function index()  //cái này chỉ quản lí group và super admin vào được
    {
            $user_id =$this->session->userdata('id');  
           
            //get group và level của user
            $groupUser   =$this->Mreport->_getGroup($user_id);        //trong my_model
       
            $level=$this->session->userdata('level');                //quyền hạn 1:toàn quyền,2:group,3 device
                             
            //Nếu là quản lí thiết bị thì không được vào
            if($groupUser == null)
            {
                echo "<script type='text/javascript'> alert('Bạn không có quyền truy cập trang quản lí group !');</script>";die;   
            }
            
            //Nếu ko có tham số truyền thì mặc định thống kê ngày hôm này,group là group đầu tiên nếu toàn quyền,chính nó nếu chỉ group
            $this->data['time']=$this->getParamString('time')== null?date('d/m/Y').'-'.date('d/m/Y'):$this->getParamString('time');
            $this->data['group']=$this->getParamString('group')== null?$groupUser[0]:$this->getParamString('group');
            
            //Check tham số group truyền lên có trong groupUser không,không có thì die(chỉ với quản lí group)
            $time=$this->data['time'];
            $group=$this->data['group'];
            
            if($level == 1)$groupUser[]=-1;     //Select có trường tất cả lấy id là -1 nên thêm vào để check tham số truyền lên
            
            if(!in_array($group, $groupUser))
            {
                echo "<script type='text/javascript'> alert('Bạn không quản lí group này !');</script>";die;   
            }
            
            //mảng group select
            $this->data['groupNet']=$this->Mreport->getGroupNet($groupUser,$level); 
            
	    $this->data['action'] = __FUNCTION__;
            $this->data['topDeviceNet']=$this->Mreport->getTopDevice(1,$time,$group);  //1 là top mạng sử dụng nhiều băng thông nhất.
            $this->data['topDeviceClient']=$this->Mreport->getTopDevice(2,$time,$group);  //2 là top mạng có nhiều người sử dụng nhất.
            $bandWidth=$this->Mreport->getTotalBandwidth($time,$group);  //Lấy tổng băng thông,up,down và số client phụ thuộc vào time và group.
            $this->data['totalBanwidth']=$bandWidth['total'];
            $this->data['totalUp']=$bandWidth['totalUp'];
            $this->data['totalDown']=$bandWidth['totalDown'];
            $this->data['totalClient']=$bandWidth['client'];
            
            $countDay=$this->Mreport->countDay($time);
            $avgClient=round($bandWidth['client']/$countDay,2);  //trung bình số người vào theo ngày
            
            $this->data['avgClient']=$avgClient;      
            $this->data['clientPerDay']=$this->Mreport->clientPerDay($time,$group);     //số người sử dụng mạng theo ngày
            $this->data['topClientNet']=$this->Mreport->getTopClientNet($time,$group);  //top client sử dụng nhiều băng thông nhất
            $this->data['topClientAccess']=$this->Mreport->getTopClientAccess($time,$group);  //top client sử dụng thường xuyên dùng mạng(đang tính số lần vào mạng nhiều nhất)
            
            $this->data['topOs']=$this->Mreport->getTopOs($time,$group);
            //lấy list nhóm mạng để truyền ra view.
            $this->data['bandwidthPerDay']=$this->Mreport->bandwidthPerDay($time,$group);
            $this->load->view('temp/layout', $this->data);
    }
    
    /**
     * Lấy danh sách thiết bị
     */
    public function listDevice()
    {
         
        $this->data['type'] = $this->getParamString('type');
        $this->data['id'] = $this->getParamInt('id');

        // bd phan trang cho list.
        $this->load->library('pagination');
        $config['per_page'] = $this->data['_per_page'] = 50;
        $this->data['page'] = $this->data['page_current'] = $this->getParamUri(2, 1);
        $offset = (($this->getParamUri(2, 1) - 1) * $config['per_page']) > 0 ? (($this->getParamUri(2, 1) - 1) * $config['per_page']) : 0;
        $data = $this->Mreport->getDevice($config['per_page'], $offset);
        $config['base_url'] = base_url($this->uri->segment(1) . '/');
        $config['total_rows'] = $this->data['sumDevice'] = $data['count'];
        $config['uri_segment'] = 2;
        $config['uri_segment_page'] = $this->getParamUri(2, 1);
        $config['suffix'] = '.html';
        $config['use_page_numbers'] = TRUE;
        $this->pagination->initialize($config);
        $this->data['data'] = $data['data'];

        //phan trang cho list.
        //$this->data['place'] = $this->Mdevice->getPlaceSelect();
        $this->data['action'] = __FUNCTION__;
        $this->load->view('temp/layout', $this->data);
    }
    
    /**
     * Báo cáo thiết bị(device)
     */
    public function deviceReport()  //cái này chỉ quản lí thiết bị
    {
       
            $user_id =$this->session->userdata('id');  
           
            //get group và level của user
            $groupUser   =$this->Mreport->_getGroup($user_id);        //trong my_model
            $level=$this->session->userdata('level');                //quyền hạn 1:toàn quyền,2:group,3 device
            $deviceId=$this->getParamString('id');                     //id device
            $this->data['deviceId']=$deviceId;
            $this->data['device']=$this->db->query('SELECT * FROM tbl_device WHERE md5(id) =' . '"'.$deviceId.'"')->row_object();
            //Nếu người dùng là quản lí device thì check quyền
            if($level == 3)
            {
                $check=$this->db->query(" SELECT * FROM manage_device_key as mdk WHERE mdk.user_id = '$user_id' AND md5(mdk.device_id)='$deviceId' ")->num_rows();
                if($check == 0)
                {
                    echo "<script type='text/javascript'> alert('Bạn không có quyền truy cập trang thống kê device này! !');</script>";die;   
                }
            }
            
            //Nếu người dùng là quản lí group cũng check quyền
            if($level == 2)
            {
                $group='('.implode(',', $groupUser).')';
                $check=$this->db->query(" SELECT * FROM tbl_device as dv WHERE md5(dv.id) = '$deviceId' AND dv.network_group IN $group ")->num_rows();
                if($check == 0)
                {
                    echo "<script type='text/javascript'> alert('Bạn không có quyền truy cập trang quản lí group !');</script>";die;   
                }
            }
            
            $this->data['time']=$this->getParamString('time')== null?date('d/m/Y').'-'.date('d/m/Y'):$this->getParamString('time');
           
            //Check tham số group truyền lên có trong groupUser không,không có thì die(chỉ với quản lí group)
            $time=$this->data['time'];
            
	    $this->data['action'] = "deviceReport";
            $bandWidth=$this->Mreport->getTotalBandwidth($time,null,$deviceId);  //Lấy tổng băng thông,up,down và số client phụ thuộc vào time và thiết bị
            $this->data['totalBanwidth']=$bandWidth['total'];
            $this->data['totalUp']=$bandWidth['totalUp'];
            $this->data['totalDown']=$bandWidth['totalDown'];
            $this->data['totalClient']=$bandWidth['client'];
            
            $countDay=$this->Mreport->countDay($time);
            $avgClient=round($bandWidth['client']/$countDay,2);  
            
            $this->data['avgClient']=$avgClient;                                       //trung bình số người vào theo ngày
            $this->data['clientPerDay']=$this->Mreport->clientPerDay($time,null,$deviceId);     //số người sử dụng mạng theo ngày
            $this->data['topClientNet']=$this->Mreport->getTopClientNet($time,null,$deviceId);  //top client sử dụng nhiều băng thông nhất
            $this->data['topClientAccess']=$this->Mreport->getTopClientAccess($time,null,$deviceId);  //top client sử dụng thường xuyên dùng mạng(đang tính số lần vào mạng nhiều nhất)
            $this->data['topOs']=$this->Mreport->getTopOs($time,null,$deviceId);
            //lấy list nhóm mạng để truyền ra view.
            $this->data['bandwidthPerDay']=$this->Mreport->bandwidthPerDay($time,null,$deviceId);
            $this->load->view('temp/layout', $this->data);        
    }
	
}
